package managed.bean;

import com.marlboroug.articles.ArticlesManagerRemote;
import com.marlboroug.articlesbyauthors.ArticlesByAuthorsRemote;
import com.marlboroug.authors.AuthorsManagerRemote;
import com.marlboroug.entity.Articles;
import com.marlboroug.entity.Articlesbyauthors;
import com.marlboroug.entity.Authors;
import java.util.ArrayList;
import java.util.List;
import javax.annotation.PostConstruct;
import javax.ejb.EJB;
import javax.faces.bean.ManagedBean;

/**
 *
 * @author Cyril Schumacher
 */
@ManagedBean
public class LibraryByAuthorsManager {
    // <editor-fold defaultstate="collapsed" desc="Membres.">
    /**
     * Gestion des articles avec les auteurs.
     */
    @EJB private ArticlesByAuthorsRemote _articlesByAuthorsManager;
    /**
     * Gestion des articles.
     */
    @EJB private ArticlesManagerRemote _articlesManager;
    /**
     * Gestions des auteurs.
     */
    @EJB private AuthorsManagerRemote _authorsManager;
    // </editor-fold>
    
    /**
     * Identifiant de l'article.
     */
    private Long _article;
    /**
     * Liste d'identifiant des articles.
     */
    private List<String> _author;

    /**
     * Obtient l'auteur sélectionné par l'utilisateur.
     * @return 
     */
    public List<String> getAuthor() {
        return _author;
    }

    /**
     * Définit l'auteur sélectionné par l'utilisateur.
     * @param _author 
     */
    public void setAuthor(List<String> _author) {
        this._author = _author;
    }

    /**
     * Obtient l'identifiant de l'article sélectionné par l'utilisateur.
     * @return Retourne un nombre de type "Long".
     */
    public Long getArticle() {
        return _article;
    }
    
    /**
     * Définit l'identifiant de l'article sélectionné par l'utilisateur.
     * @param id Identifiant de l'article.
     */
    public void setArticle(Long id) {
        _article = id;
    }

    /**
     * Obtient la liste des auteurs existants.
     * @return Retourne une liste d'objet de type "Authors".
     */
    public List<Authors> getAuthors() {
        return _authorsManager.findAll();
    }
    
    /**
     * Obtient une liste de libres.
     * @return Retourne une liste d'objet de type "Articles".
     */
    public List<Articles> getArticles() {
        return _articlesManager.findAll();
    }    
    
    /**
     * Met à jour un livre.
     */
    public void update() {
        Articles article = _articlesManager.find(_article);
        
        for(Articlesbyauthors articles : _articlesByAuthorsManager.findArticlesIndex()) {
            if (articles.getIdArticles().getIDarticles().equals(_article)) {
                _articlesByAuthorsManager.delete(articles.getIDarticlesbyauthors());
            }
        }
        
        for (String author : _author) {
            Articlesbyauthors newAuthor = new Articlesbyauthors();
            newAuthor.setIdArticles(article);
            newAuthor.setIdAuthors(_authorsManager.find(Long.decode(author)));
            
            _articlesByAuthorsManager.create(newAuthor);
        }
        
    }
    
    /**
     * Initialise la classe.
     */
    @PostConstruct
    public void initialize() {
        _author = new ArrayList<>(); 
    }
}
